package fr.sorbonne.inf1.tp3.main;


import fr.sorbonne.inf1.tp3.controleur.Controleur;
import fr.sorbonne.inf1.tp3.model.InterfaceApplication;
import fr.sorbonne.inf1.tp3.vue.Vue;
import fr.sorbonne.inf1.tp3.properties.BundleTool;
import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Locale;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;


/**
 * 
 * @author Dubos Romain
 * @author Oukherfellah Riad
 */
public class Main {

    /**
     * Pour changer d'application entre Local et distant il faut modifier ce fichier
     */
    public static void main(String[] args) {
        /* Charge le fichier properties pour récupérer la bon Model **/
        InterfaceApplication model=null;
        String modelClass = "";
        String remoteObject = "";
        Properties prop = new Properties();
        FileInputStream in = null;
        try {
            in = new FileInputStream("model.properties");
            prop.load(in);
            modelClass = prop.getProperty("model");
            remoteObject = prop.getProperty("remoteObject");
            in.close();
            Class classe = Class.forName(modelClass);
            Constructor c = classe.getConstructor(new Class [] {Class.forName("java.lang.String")});
            model = (InterfaceApplication) c.newInstance(new Object [] {remoteObject});
//            model = (InterfaceApplication ) Class.forName(modelClass).newInstance();
        } catch (InstantiationException ex) {
            System.err.println("[ERROR] La classe "+modelClass+" est introuvable\nVérifier fichier .properties");
            System.exit(0);
        } catch (IllegalAccessException ex) {
            System.err.println("[ERROR] La classe "+modelClass+" est introuvable\nVérifier fichier .properties");
            System.exit(0);
        } catch (IllegalArgumentException ex) {
            System.err.println("[ERROR] La classe "+modelClass+" est introuvable\nVérifier fichier .properties");
            System.exit(0);
        } catch (InvocationTargetException ex) {
            System.err.println("[ERROR] La classe "+modelClass+" est introuvable\nVérifier fichier .properties");
            System.exit(0);
        } catch (NoSuchMethodException ex) {
            System.err.println("[ERROR] La classe "+modelClass+" est introuvable\nVérifier fichier .properties");
            System.exit(0);
        } catch (SecurityException ex) {
            System.err.println("[ERROR] La classe "+modelClass+" est introuvable\nVérifier fichier .properties");
            System.exit(0);
        } catch (ClassNotFoundException ex) {
            System.err.println("[ERROR] La classe "+modelClass+" est introuvable\nVérifier fichier .properties");
            System.exit(0);
        } catch (IOException ex) {
            System.err.println("[ERROR] Fichier properties introuvable");
            System.exit(0);
        }
        
        
        
        
        BundleTool.setBundle(Locale.FRANCE);
        Vue vue = new Vue();
        

        Controleur ctrl= new Controleur(vue, model);
        vue.abonnement(ctrl);
       
    }
}

        
        //InterfaceTransport t=null;
        
//        /**
//         * Décommenter ici pour activer l'activation de l'application en locale
//         */
//        /** Pour la communication locale **/
//           //InterfaceApplication model= new Application();
//        try {
//            /**
//         * Décommenter ici pour activer l'activation de l'application en distante
//         */           
//           /**
//            * Pour la communication Client/Serveur
//            */
//           t = new Transport("127.0.0.1", 1234);
//        } catch (IOException ex) {
//            System.err.println("Erreur de connexion au serveur distant");
//            System.exit(0);
//        }
       
        //InterfaceProtocoleClient p = new ProtocoleClient(t);
       
        //InterfaceApplication model= new Application();
